<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>JS的error处理</h1>
    <script>
        //JS的error处理
        //1. 认识JS中的常见错误的类型
            // 1. Error: 所有错误的父类型
            // 2. ReferenceError: 引用的变量不存在
            // 3. TypeError: 数据类型不正确的错误
            // 4. RangeError: 数据值不在其所允许的范围内
            // 5. SyntaxError: 语法错误

            // console.log(m); // 引用的变量不存在
            // Uncaught ReferenceError: m is not defined

            // let m = 10;
            // m(); //Uncaught TypeError: m is not a function

            // 我们js有一定容错处理
            // const arr = [10,20,30];
            // const ob = {name:"aa",age:20};
            // console.log(arr[10]);  // undefined 数组下标访问越界          
            // console.log(ob.cc);    // undefined 对象调用不存在属性

            // RangeError: 数据值不在其所允许的范围内
            // function fn1() {
            //     fn1()
            // }
            // fn1() // RangeError: Maximum call stack size exceeded
            
            // 语法错误，是程序尚未执行，在预处理时的代码校验发现的。
            //if(true){ //Uncaught SyntaxError: Unexpected end of input (at 03-JS的error处理.html:39:5)
    
        // 2.2. 错误处理
            // 1. 捕获错误: try ... catch
            // 2. 抛出错误: throw error
        // 为什么需要错误处理，因为出错会导致程序中断运行,对于不重要的错误，希望程序继续执行。 
        
        console.log("start...");
        try{
            let age = -20;
            if(age < 10 || age > 100){
                throw new Error("年龄非法！");
            }
            console.log(age);
           // console.log(m);
        }catch(err){
            //console.log(err);
            console.log(err.message); // 错误信息
            console.log(err.stack); // 错误信息加位置
        }
        console.log("end...");
    </script>

</body>
</html>